Spring Cloud微服务 | Note(7)
@ 2018年8月9日 15:14:02
API网关
可以管理所有API,用于统一API入口;所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能 ;具有功能:如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理;
API网关的意义
集成多个API;WEB应用API网关,移动应用API网关;避免内部信息泄露;为微服务添加额外的安全层;支持混合通信协议;降低构建微服务的复杂性;微服务模拟与虚拟化;
弊端:
架构上需要额外考虑更多编排与管理;
路由逻辑配置要进行统一的管理;可能引发单点故障;
API网关的实现方式
NGINX:HTTP服务器和反向代理,可用于API网关,简单配置,高性能稳定,低资源消耗;
Zuul:认证,鉴权,限流,路由,监控,弹性,安全,负载均衡,协助单点压测,静态响应等边缘服务的框架;
Kong:API网关的管理平台;专注提供微服务,基于NGINX;多插件;
如何集成Zuul
Zuul:主要作为路由转发和过滤器;
路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务;
zuul默认和Ribbon结合实现了负载均衡的功能;
功能:认证,压力测试,金丝雀测试,动态路由,负载削减,安全,静态响应处理,主动交换管理;
1 | // build.gradle |
以上配置的意思为:
启动micro-weather-eureka-client时,端口号为:8081;
而启动micro-weather-eureka-client-zuul,端口号为:8080;
访问http://localhost:8080/hello,请求的是client的服务;
而访问http://localhost:8081/hello,请求的是zuul的服务;
而访问http://localhost:8080/hi/hello,请求的是client的服务,由zuul进行了服务请求的转发;
实现API网关
将功能微服务对于数据API与城市数据API的依赖,转化为对Zuul网关的依赖;
1 | // application.properties(gateway) |
1 | // 创建新的DataClient替换原本的CityClient以及WeatherDataServer |
附录
@ 2018年8月9日 23:08:56